import BaseModel from '../web/BaseModel'
import { get, deleteAjax } from '@/api/ajax'
import API from '@/api/apis'
import Filters from "@/utils/filters";
import Config from '@/config/index'

/**
 * 阿里OSS文件对象
 */
class OSSFileModel extends BaseModel {
  // 构造方法
  constructor() {
    super()
    /**
     * 文件名称
     */
    this.name = null
    /**
     * 文件URL
     */
    this.url = null
    /**
     * 是否播放
     */
    this.play = false
  }

  /* ----- 获取指定图片大小 -------*/
  /**
   * 获取绝对路径
   * @returns {string}
   */
  get cdnUrl() {
    return `${Config.imageCDNPerfix}${this.name}`
  }

  /**
   * 获取图片路径
   * @returns {string}
   */
  get photoUrl() {
    return `${Config.photoCDNPerfix}${this.name}`
  }

  /**
   * PC端列表图片URL
   * @returns {*|string}
   */
  get pcWebListUrl() {
    return Filters.imageFill(this.cdnUrl, 200, 200)
  }

  /**
   * PC端图片列表显示URL
   * @returns {*|string}
   */
  get pcPhotoListUrl() {
    return Filters.imageFill(this.photoUrl, 200, 200)
  }

  /**
   * 手机端图片列表URL
   * @returns {*|string}
   */
  get mPhotoListUrl() {
    return Filters.imageFill(this.photoUrl, 4, 4, 'rem')
  }

  /**
   * PC 视频截帧
   * @returns {*|string}
   */
  get pcVideoFromeUrl() {
    return Filters.videoFrame(this.photoUrl, 0, 300, 0)
  }

  /**
   * 移动端视频截帧
   * @returns {*|string}
   */
  get mVideoFromeUrl() {
    return Filters.videoFrame(this.photoUrl, 0, 500, 0)
  }

  /**
   * 加载所有数据
   * @param lastKey 最后一个路径
   * @param otherData 其他参数
   * @returns {Promise<any>}
   */
  static loadModels(lastKey, otherData) {
    return new Promise((resolve, reject) => {
      get(API.ali.ossList, {
        lastKey: lastKey,
        pageSize: 30,
        ...otherData
      }).then((data) => {
        resolve(this.getModelsWithArr(data.objects))
      }).catch((err) => {
        reject(err)
      })
    })
  }

  /**
   * 删除数据
   * @param bucket 指定的快
   * @returns {Promise<any>}
   */
  removeData(bucket) {
    return new Promise((resolve, reject) => {
      deleteAjax(API.ali.ossRemove, {
        fileName: this.name,
        bucket
      }).then((data) => {
        resolve(data)
      }).catch((err) => {
        reject(err)
      })
    })
  }
}

export default OSSFileModel
